# 开发日志工具类
import logging
import os


class Logger(object):
    # 定义日志级别映射，将字符串形式的日志级别映射到对应的logging模块中的日志级别常量
    level_relations = {
        'debug': logging.DEBUG,  # 映射debug级别，调试
        'info': logging.INFO,  # 映射info级别，信息
        'warning': logging.WARNING,  # 映射warning级别，警告
        'error': logging.ERROR,  # 映射error级别，错误
        'crit': logging.CRITICAL  # 映射critical级别，危险
    }

    def __init__(self, root_path, log_name, level='info', fmt='%(asctime)s-%(levelname)s:%(message)s'):
        """
        初始化Logger类

        :param root_path: 日志文件的根路径
        :param log_name: 日志文件的名称
        :param level: 日志级别，默认为'info'
        :param fmt: 日志格式字符串，默认为'年月日时分秒-日志级别:消息'
        """
        # 指定日志保存的路径
        self.root_path = root_path

        # 初始logger名称和格式
        self.log_name = log_name

        # 初始格式
        self.fmt = fmt

        # 先声明一个 Logger 对象
        self.logger = logging.getLogger(log_name)

        # 设置日志级别
        self.logger.setLevel(self.level_relations.get(level))

    def get_logger(self):
        """
        获取日志记录器对象

        :return: logging.Logger对象，用于记录日志
        """
        # 构造日志文件的完整路径
        path = os.path.join(self.root_path, 'log')
        # 确保日志目录存在，不存在则创建
        os.makedirs(path, exist_ok=True)
        file_name = os.path.join(path, self.log_name + '.log')
        # 创建文件日志处理器
        rotate_handler = logging.FileHandler(file_name, encoding="utf-8", mode="a")

        # 创建日志格式器
        formatter = logging.Formatter(self.fmt)
        # 设置处理器的日志格式
        rotate_handler.setFormatter(formatter)

        # 将文件日志处理器添加到日志记录器中
        self.logger.addHandler(rotate_handler)
        # 返回日志记录器对象
        return self.logger
